From fbdcd629672f1b1d93673d7ff53b49f7ee2e6563 Mon Sep 17 00:00:00 2001 From: robertl Date: Tue, 22 Jul 2008 05:50:43 +0000 Subject: [PATCH] MTK: create new track each time logger is turned on. (Maybe a little wine, a little soft music...) --- internal_styles.c | 46 +++++++++++++++++++++++++++-- mtk_logger.c | 45 ++++++++++++++++++++-------- reference/track/mtk_logger.gpx | 15 +++++++++- reference/track/mtk_logger_m241.gpx | 3 +- 4 files changed, 93 insertions(+), 16 deletions(-) diff --git a/internal_styles.c b/internal_styles.c index b21cab142..49c6060cb 100644 --- a/internal_styles.c +++ b/internal_styles.c @@ -717,6 +717,48 @@ static char mxf[] = "OFIELD CONSTANT, \"ff0000\", \"%s\" # COLOR\n" "OFIELD CONSTANT, \"47\", \"%s\" # ICON\n" ; +static char navigonwpt[] = +"# gpsbabel XCSV style file\n" +"# Author: Tom Glaab\n" +"#\n" +"DESCRIPTION Navigon Waypoints\n" +"SHORTLEN 8\n" +"#\n" +"#\n" +"# FILE LAYOUT DEFINITIIONS:\n" +"#\n" +"FIELD_DELIMITER |\n" +"RECORD_DELIMITER NEWLINE\n" +"BADCHARS |\n" + +"#\n" +"# INDIVIDUAL DATA FIELDS, IN ORDER OF APPEARANCE:\n" +"#\n" + +"OFIELD SHORTNAME, \"\",\"[%-.14s \"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"\",\"]\"\n" +"OFIELD CONSTANT, \"%s\",\"[0][17]\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD LON_DECIMAL, \"\", \"%08.5f\"\n" +"OFIELD LAT_DECIMAL, \"\", \"%08.5f\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"\"\n" +"OFIELD CONSTANT, \"%s\",\"49\"\n" +; static char nima[] = "# gpsbabel XCSV style file\n" "#\n" @@ -1139,8 +1181,8 @@ static char xmapwpt[] = "IFIELD IGNORE, \"\", \"%-.31s\"\n" "IFIELD DESCRIPTION, \"\", \"%-.78s\"\n" ; -style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap2006", xmap2006 } , { "xmap", xmap } , { "tomtom_itn", tomtom_itn } , { "tomtom_asc", tomtom_asc } , { "tabsep", tabsep } , { "sportsim", sportsim } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "kwf2", kwf2 } , { "ktf2", ktf2 } , { "kompass_wp", kompass_wp } , { "kompass_tk", kompass_tk } , { "iblue747", iblue747 } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "geonet", geonet } , { "garmin_poi", garmin_poi } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "cup", cup } , { "csv", csv } , { "cambridge", cambridge } , { "arc", arc } , {0,0}}; -size_t nstyles = 31; +style_vecs_t style_list[] = {{ "xmapwpt", xmapwpt } , { "xmap2006", xmap2006 } , { "xmap", xmap } , { "tomtom_itn", tomtom_itn } , { "tomtom_asc", tomtom_asc } , { "tabsep", tabsep } , { "sportsim", sportsim } , { "saplus", saplus } , { "s_and_t", s_and_t } , { "openoffice", openoffice } , { "nima", nima } , { "navigonwpt", navigonwpt } , { "mxf", mxf } , { "mapconverter", mapconverter } , { "kwf2", kwf2 } , { "ktf2", ktf2 } , { "kompass_wp", kompass_wp } , { "kompass_tk", kompass_tk } , { "iblue747", iblue747 } , { "gpsman", gpsman } , { "gpsdrivetrack", gpsdrivetrack } , { "gpsdrive", gpsdrive } , { "geonet", geonet } , { "garmin_poi", garmin_poi } , { "garmin301", garmin301 } , { "fugawi", fugawi } , { "dna", dna } , { "custom", custom } , { "cup", cup } , { "csv", csv } , { "cambridge", cambridge } , { "arc", arc } , {0,0}}; +size_t nstyles = 32; #else /* CSVFMTS_ENABLED */ style_vecs_t style_list[] = {{0,0}}; size_t nstyles = 0; diff --git a/mtk_logger.c b/mtk_logger.c index e4903631e..12273658e 100644 --- a/mtk_logger.c +++ b/mtk_logger.c @@ -40,8 +40,8 @@ ./gpsbabel -D 2 -t -w -i mtk -f /dev/ttyUSB0 -o gpx -F out.gpx # Parse an existing .bin file (data_2007_09_04.bin), output trackpoints as - # both CSV file and GPX - ./gpsbabel -D 2 -t -i mtk-bin,csv=data__2007_09_04.csv -f data_2007_09_04.bin -o gpx -F out.gpx + # both CSV file and GPX, discard points without fix + ./gpsbabel -D 2 -t -i mtk-bin,csv=data__2007_09_04.csv -f data_2007_09_04.bin -x discard,fixnone -o gpx -F out.gpx Todo: o .... @@ -103,6 +103,12 @@ static const char *MTK_ACK[] = { /* Flags returned from PMTK001 ack packet */ "Invalid packet", "Unsupported packet type", "Valid packet but action failed", "Valid packet, action success" }; +#define MTK_EVT_BITMASK (1<<0x02) +#define MTK_EVT_PERIOD (1<<0x03) +#define MTK_EVT_DISTANCE (1<<0x04) +#define MTK_EVT_SPEED (1<<0x05) +#define MTK_EVT_START (1<<0x07) + /* *************************************** */ /* Data id, type, sizes used by MTK chipset - don't touch.... */ @@ -183,6 +189,7 @@ struct mtk_loginfo { unsigned int bitmask; int logLen; int period, distance, speed; /* in 10:ths of sec, m, km/h */ + int track_event; } mtk_loginfo; /* *************************************** */ @@ -597,10 +604,16 @@ static int add_trackpoint(int idx, unsigned long bmask, struct data_item *itm){ char wp_name[20]; waypoint *trk = waypt_new(); - if ( global_opts.masked_objective & TRKDATAMASK && trk_head == NULL ){ + if ( global_opts.masked_objective & TRKDATAMASK && (trk_head == NULL || (mtk_info.track_event & MTK_EVT_START) ) ){ + char spds[50]; trk_head = route_head_alloc(); - xasprintf(&trk_head->rte_desc, "Log every %.0f sec, %.0f m, %.0f km/h" - , mtk_info.period/10., mtk_info.distance/10., mtk_info.speed/10.); + xasprintf(&trk_head->rte_name, "track-%d", 1+track_count() ); + + spds[0] = '\0'; + if ( mtk_info.speed > 0 ) + sprintf(spds, " when moving above %.0f km/h", mtk_info.speed/10.); + xasprintf(&trk_head->rte_desc, "Log every %.0f sec, %.0f m%s" + , mtk_info.period/10., mtk_info.distance/10., spds); track_add_head(trk_head); } @@ -837,8 +850,7 @@ int mtk_parse(unsigned char *data, int dataLen, unsigned int bmask){ unsigned char crc; struct data_item itm; - dbg(5,"Entering mtk_parse, count = %i, dataLen = %i\n", - count, dataLen); + dbg(5,"Entering mtk_parse, count = %i, dataLen = %i\n", count, dataLen); if ( global_opts.debug_level > 5 ) { int j; fprintf(stderr,"# Data block:"); @@ -1005,6 +1017,7 @@ int mtk_parse(unsigned char *data, int dataLen, unsigned int bmask){ add_trackpoint(count, bmask, &itm); + mtk_info.track_event = 0; return i; } @@ -1028,33 +1041,40 @@ static int mtk_parse_info(const unsigned char *data, int dataLen){ dbg(1, "# Log bitmask is: %.8x\n", bm); if ( is_m241 ) bm &= 0x7fffffffU; - if ( mtk_info.bitmask != bm ) + if ( mtk_info.bitmask != bm ){ dbg(1," ########## Bitmask Change %.8x -> %.8x ###########\n", mtk_info.bitmask, bm); + mtk_info.track_event |= MTK_EVT_BITMASK; + } mtk_info.bitmask = bm; mtk_info.logLen = mtk_log_len(mtk_info.bitmask); break; case 0x03: dbg(1, "# Log period change %.0f sec\n", cmd/10.); + mtk_info.track_event |= MTK_EVT_PERIOD; mtk_info.period = cmd; break; case 0x04: dbg(1, "# Log distance change %.1f m\n", cmd/10.); + mtk_info.track_event |= MTK_EVT_DISTANCE; mtk_info.distance = cmd; break; case 0x05: dbg(1, "# Log speed change %.1f km/h\n", cmd/10.); + mtk_info.track_event |= MTK_EVT_SPEED; mtk_info.speed = cmd; break; case 0x06: dbg(1, "# Log policy change 0x%.4x\n", cmd); - if ( cmd == 0x01 ) + if ( cmd == 0x01 ) dbg(1, "# Log policy change to OVERWRITE\n"); if ( cmd == 0x02 ) dbg(1, "# Log policy change to STOP\n"); break; case 0x07: - if ( cmd == 0x0106 ) - dbg(5, "# GPS Logger# Turned On\n"); // Fixme - start new trk + if ( cmd == 0x0106 ){ + dbg(5, "# GPS Logger# Turned On\n"); // Fixme - start new trk + mtk_info.track_event |= MTK_EVT_START; + } if ( cmd == 0x0104 ) dbg(5, "# GPS Logger# Log disabled\n"); break; @@ -1181,7 +1201,8 @@ static void file_read(void) { mtk_info.distance = log_distance; mtk_info.speed = log_speed; } - + mtk_info.track_event = 0; + pos = 0x200; // skip header...first data position fseek(fl, pos, SEEK_SET); diff --git a/reference/track/mtk_logger.gpx b/reference/track/mtk_logger.gpx index 1e119905e..ec4ebaaa6 100644 --- a/reference/track/mtk_logger.gpx +++ b/reference/track/mtk_logger.gpx @@ -43,7 +43,8 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/ 7 - Log every 5 sec, 100 m, 0 km/h + track-1 + Log every 5 sec, 100 m 98.469612 @@ -61,6 +62,12 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/ TP000002 none + + + + track-2 + Log every 5 sec, 100 m + 98.469612 @@ -7370,6 +7377,12 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/ 3d 7 + + + + track-3 + Log every 5 sec, 100 m + 29.132912 diff --git a/reference/track/mtk_logger_m241.gpx b/reference/track/mtk_logger_m241.gpx index d029d5484..e4375b654 100644 --- a/reference/track/mtk_logger_m241.gpx +++ b/reference/track/mtk_logger_m241.gpx @@ -92,7 +92,8 @@ xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/ 4.480000 - Log every 5 sec, 0 m, 6 km/h + track-1 + Log every 5 sec, 0 m when moving above 6 km/h 374.812500 -- 2.30.2